#include<iostream>
#include<stack>
using namespace std;

const int N = 110;
bool st[N]; // 标记有没有匹配


int main()
{
    string s; cin >> s;
    int n = s.size();
    stack<int> stk; // 里面存的是左括号的下标
    string ret;

    for(int i = 0; i < n; i++)
    {
        // 遇到左括号
        if(s[i] == '(' || s[i] == '[')
        {
            stk.push(i);
        }
        // 遇到右括号
        else
        {
            if(stk.empty()) continue;
            
            // 前面有左括号，能匹配上
            char ch = s[stk.top()];
            if((ch == '(' && s[i] == ')') || (ch == '[' && s[i] == ']'))
            {
                // 匹配成功下标就标记true
                st[stk.top()] = true;
                st[i] = true;
                // 匹配成功之后就可以删除了
                stk.pop();
            }
        }
    }

    for(int i = 0; i < n; i++)
    {
        char ch = s[i];
        // 能匹配的
        if(st[i]) ret += ch;
        // 不能匹配的就加括号
        else
        {
            if(ch == '(')
            {
                ret += ch;
                ret += ')';
            }
            else if(ch == '[')
            {
                ret += ch;
                ret += ']';
            }
            else if(ch == ')')
            {
                ret += '(';
                ret += ch;
            }
            else if(ch == ']')
            {
                ret += '[';
                ret += ch;
            }
        }
    }
    cout << ret << endl;
    return 0;
}